新增 admin/tenancy/tracking/info接口,request_status_at录入

FFIB 2 年之前
父节点
当前提交
adfe0b774b
共有 4 个文件被更改,包括 149 次插入13 次删除
  1. 96 6
      api/tenancy_admin_views.py
  2. 11 1
      api/tenancy_views.py
  3. 2 0
      api/urls.py
  4. 40 6
      tenancy/models.py

+ 96 - 6
api/tenancy_admin_views.py

@@ -7,11 +7,14 @@ from django_logit import logit
7 7
 from django_response import response
8 8
 from paginator import pagination
9 9
 from TimeConvert import TimeConvert as tc
10
+from django.db.models import Q
11
+
10 12
 
11 13
 from api.tenancy_views import tenancy_tracking_info_subscribe
12 14
 from kodo.decorators import check_admin
13 15
 from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
14 16
 from utils.error.errno_utils import TenancyStatusCode
17
+from utils.kuaidi.synquery import KuaiDi100
15 18
 
16 19
 
17 20
 @logit
@@ -19,14 +22,19 @@ from utils.error.errno_utils import TenancyStatusCode
19 22
 def shot_list(request, administrator):
20 23
     page = request.POST.get('page', 1)
21 24
     num = request.POST.get('num', 20)
25
+    query = request.POST.get('query', '')
22 26
 
23 27
     shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk')
28
+    if query:
29
+        shots = shots.filter(Q(sn__icontains=query))
30
+    count = shots.count()
24 31
     shots = [shot.data for shot in shots]
25 32
     shots, left = pagination(shots, page, num)
26 33
 
27 34
     return response(data={
28 35
         'shots': shots,
29 36
         'left': left,
37
+        'count': count,
30 38
     })
31 39
 
32 40
 
@@ -111,14 +119,32 @@ def shot_update(request, administrator):
111 119
 def shot_request_list(request, administrator):
112 120
     page = request.POST.get('page', 1)
113 121
     num = request.POST.get('num', 20)
122
+    query = request.POST.get('query', '')
123
+    start_time = request.POST.get('start_time', '')
124
+    end_time = request.POST.get('end_time', '')
125
+    request_status = request.POST.get('request_status', 'all')
114 126
 
115 127
     reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
116
-    reqs = [req.data for req in reqs]
128
+
129
+    if query:
130
+        reqs = reqs.filter(Q(phone__icontains=query), Q(name__icontains=query))
131
+
132
+    if request_status != 'all':
133
+        reqs = reqs.filter(request_status=request_status)
134
+
135
+    if start_time and end_time:
136
+        start_time = tc.string_to_utc_datetime(start_time, format='%Y%m%d')
137
+        end_time = tc.string_to_utc_datetime(end_time + ' 23:59:59', format='%Y%m%d %H:%M:%S')
138
+        maintenances = maintenances.filter(created_at__range=(start_time, end_time))
139
+
140
+    count = reqs.count()
141
+    reqs = [req.admindata for req in reqs]
117 142
     reqs, left = pagination(reqs, page, num)
118 143
 
119 144
     return response(data={
120 145
         'reqs': reqs,
121 146
         'left': left,
147
+        'count': count,
122 148
     })
123 149
 
124 150
 
@@ -133,7 +159,7 @@ def shot_request_detail(request, administrator):
133 159
         return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
134 160
 
135 161
     return response(data={
136
-        'req': req.data,
162
+        'req': req.admindata,
137 163
     })
138 164
 
139 165
 
@@ -150,7 +176,11 @@ def shot_request_update(request, administrator):
150 176
     purpose = request.POST.get('purpose', '')
151 177
     return_date = request.POST.get('return_date', '')
152 178
     request_status = request.POST.get('request_status', '')
179
+    express_name = request.POST.get('express_name', '')
180
+    express_com = request.POST.get('express_com', '')
153 181
     tracking_number = request.POST.get('tracking_number', '')
182
+    back_express_name = request.POST.get('back_express_name', '')
183
+    back_express_com = request.POST.get('back_express_com', '')
154 184
     back_tracking_number = request.POST.get('back_tracking_number', '')
155 185
 
156 186
     try:
@@ -177,8 +207,16 @@ def shot_request_update(request, administrator):
177 207
         req.return_date = tc.to_date(return_date)
178 208
     if request_status:
179 209
         req.request_status = request_status
210
+    if express_name:
211
+        req.express_name = express_name
212
+    if express_com:
213
+        req.express_com = express_com
180 214
     if tracking_number:
181 215
         req.tracking_number = tracking_number
216
+    if back_express_name:
217
+        req.back_express_name = back_express_name
218
+    if back_express_com:
219
+        req.back_express_com = back_express_com
182 220
     if back_tracking_number:
183 221
         req.back_tracking_number = back_tracking_number
184 222
     req.save()
@@ -189,7 +227,7 @@ def shot_request_update(request, administrator):
189 227
         tenancy_tracking_info_subscribe(req, 'back_tracking')
190 228
 
191 229
     return response(data={
192
-        'req': req.data,
230
+        'req': req.admindata,
193 231
     })
194 232
 
195 233
 
@@ -209,7 +247,7 @@ def shot_request_audit(request, administrator):
209 247
     req.save()
210 248
 
211 249
     return response(data={
212
-        'req': req.data,
250
+        'req': req.admindata,
213 251
     })
214 252
 
215 253
 
@@ -218,6 +256,8 @@ def shot_request_audit(request, administrator):
218 256
 @transaction.atomic
219 257
 def shot_request_send(request, administrator):
220 258
     req_id = request.POST.get('req_id') or request.POST.get('request_id')
259
+    express_name = request.POST.get('express_name', '')
260
+    express_com = request.POST.get('express_com', '')
221 261
     tracking_number = request.POST.get('tracking_number', '')
222 262
 
223 263
     try:
@@ -225,11 +265,20 @@ def shot_request_send(request, administrator):
225 265
     except TenancyShotRequestInfo.DoesNotExist:
226 266
         return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
227 267
 
268
+    old_tracking_number = req.tracking_number
269
+
270
+    req.express_name = express_name
271
+    req.express_com = express_com
228 272
     req.tracking_number = tracking_number
273
+    req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_SEND
274
+    req.request_status_at = {TenancyShotRequestInfo.TENANCY_TRACKING_SEND: tc.utc_datetime()}
229 275
     req.save()
230 276
 
277
+    if tracking_number and tracking_number != old_tracking_number:
278
+        tenancy_tracking_info_subscribe(req, 'tracking')
279
+
231 280
     return response(data={
232
-        'req': req.data,
281
+        'req': req.admindata,
233 282
     })
234 283
 
235 284
 
@@ -245,8 +294,49 @@ def shot_request_signed(request, administrator):
245 294
         return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
246 295
 
247 296
     req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED
297
+    request_status_at = req.request_status_at
298
+    request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED] = tc.utc_datetime()
299
+    req.request_status_at = request_status_at
248 300
     req.save()
249 301
 
250 302
     return response(data={
251
-        'req': req.data,
303
+        'req': req.admindata,
304
+    })
305
+
306
+
307
+@logit
308
+@check_admin
309
+def shot_request_tracking_info(request):
310
+    request_id = request.POST.get('request_id', '')
311
+    type_ = request.POST.get('type', 'tracking')  # tracking / back_tracking
312
+
313
+    try:
314
+        req = TenancyShotRequestInfo.objects.get(pk=maintenance_id, status=True)
315
+    except TenancyShotRequestInfo.DoesNotExist:
316
+        return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
317
+
318
+    tracking_info = {}
319
+    if type_ == 'tracking':
320
+        if req.express_com and req.tracking_number:
321
+            tracking_info = KuaiDi100().track(req.express_com, req.tracking_number)
322
+            req.tracking_info = tracking_info
323
+            req.save()
324
+    else:
325
+        if req.back_express_com and req.back_tracking_number:
326
+            tracking_info = KuaiDi100().track(req.back_express_com, req.back_tracking_number)
327
+            req.back_tracking_info = tracking_info
328
+            req.save()
329
+
330
+    if tracking_info:
331
+        try:
332
+            tracking_info = json.loads(tracking_info)
333
+        except Exception:
334
+            tracking_info = {}
335
+
336
+    if tracking_info:
337
+        tenancy_tracking_info_subscribe(req, 'tracking')
338
+
339
+    return response(data={
340
+        'type': type_,
341
+        'tracking_info': tracking_info,
252 342
     })

+ 11 - 1
api/tenancy_views.py

@@ -23,7 +23,7 @@ def shot_list(request):
23 23
     page = request.POST.get('page', 1)
24 24
     num = request.POST.get('num', 20)
25 25
 
26
-    shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk')
26
+    shots = TenancyShotInfo.objects.filter(tenancy_status=0, status=True).order_by('-pk')
27 27
     shots = [shot.data for shot in shots]
28 28
     shots, left = pagination(shots, page, num)
29 29
 
@@ -119,6 +119,9 @@ def shot_request_signed(request):
119 119
 
120 120
     req.tracking_signed_images = signed_images
121 121
     req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_SEND_SIGNED
122
+    request_status_at = req.request_status_at
123
+    request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_SEND_SIGNED] = tc.utc_datetime()
124
+    req.request_status_at = request_status_at
122 125
     req.save()
123 126
 
124 127
     return response(data={
@@ -131,6 +134,8 @@ def shot_request_signed(request):
131 134
 def shot_request_sendback(request):
132 135
     req_id = request.POST.get('req_id') or request.POST.get('request_id')
133 136
     user_id = request.POST.get('user_id', '')
137
+    back_express_com = request.POST.get('back_express_com', '')
138
+    back_express_name = request.POST.get('back_express_name', '')
134 139
     back_tracking_number = request.POST.get('back_tracking_number', '')
135 140
 
136 141
     try:
@@ -140,8 +145,13 @@ def shot_request_sendback(request):
140 145
 
141 146
     old_back_tracking_number = req.back_tracking_number
142 147
 
148
+    req.back_express_com = back_express_com
149
+    req.back_express_name = back_express_name
143 150
     req.back_tracking_number = back_tracking_number
144 151
     req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_BACK
152
+    request_status_at = req.request_status_at
153
+    request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_BACK] = tc.utc_datetime()
154
+    req.request_status_at = request_status_at
145 155
     req.save()
146 156
 
147 157
     if back_tracking_number and back_tracking_number != old_back_tracking_number:

+ 2 - 0
api/urls.py

@@ -355,6 +355,8 @@ urlpatterns += [
355 355
     url(r'^admin/tenancy/shot/request/send$', tenancy_admin_views.shot_request_send, name='admin_tenancy_shot_request_send'),
356 356
     url(r'^admin/tenancy/shot/request/signed$', tenancy_admin_views.shot_request_signed, name='admin_tenancy_shot_request_signed'),
357 357
 
358
+    url(r'^admin/tenancy/tracking/info$', tenancy_admin_views.shot_request_tracking_info, name='admin_shot_request_tracking_info'),
359
+
358 360
     # 快递信息回调接口
359 361
     url(r'^tenancy/tracking/info/callback$', tenancy_views.tenancy_tracking_info_callback, name='tenancy_tracking_info_callback'),
360 362
 ]

+ 40 - 6
tenancy/models.py

@@ -57,10 +57,10 @@ class TenancyShotInfo(BaseModelMixin):
57 57
 
58 58
 
59 59
 class TenancyShotRequestInfo(BaseModelMixin):
60
-    TENANCY_TRACKING_SEND = u'寄出'
61
-    TENANCY_TRACKING_SEND_SIGNED = u'寄出已签收'
62
-    TENANCY_TRACKING_BACK = u'寄回'
63
-    TENANCY_TRACKING_BACK_SIGNED = u'寄回已签收并检查无损坏'
60
+    TENANCY_TRACKING_SEND = u'寄出运送中'
61
+    TENANCY_TRACKING_SEND_SIGNED = u'寄出签收'
62
+    TENANCY_TRACKING_BACK = u'寄回运送中'
63
+    TENANCY_TRACKING_BACK_SIGNED = u'寄回签收'
64 64
 
65 65
     AUDIT_PASS = 1
66 66
     AUDIT_STATUS = (
@@ -152,7 +152,41 @@ class TenancyShotRequestInfo(BaseModelMixin):
152 152
             'back_tracking_signed': self.back_tracking_signed,
153 153
             'audit_status': self.audit_status,
154 154
             'request_status': self.request_status,
155
-            'request_status_at': {k: tc.local_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%dT%H:%M:%S.%fZ')) for k, v in self.request_status_at.items()},
155
+            'request_status_at': {k: tc.local_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%d')) for k, v in self.request_status_at.items()},
156
+            'created_at': tc.local_string(tc.string_to_utc_datetime(self.created_at, format='%Y-%m-%d')),
157
+        }
158
+
159
+    @property
160
+    def admindata(self):
161
+        try:
162
+            shot = TenancyShotInfo.objects.get(shot_id=self.shot_id)
163
+        except TenancyShotInfo.DoesNotExist:
164
+            shot = None
165
+        return {
166
+            'req_id': self.request_id,
167
+            'request_id': self.request_id,
168
+            'shot_id': self.shot_id,
169
+            'shot_info': shot.data if shot else {},
170
+            'user_id': self.user_id,
171
+            'name': self.name,
172
+            'phone': self.phone,
173
+            'location': self.location,
174
+            'postcode': self.postcode,
175
+            'purpose': self.purpose,
176
+            'return_date': tc.local_date_string(self.return_date),
177
+            'express_name': self.express_name,
178
+            'express_com': self.express_com,
179
+            'tracking_number': self.tracking_number,
180
+            'tracking_info': self.tracking_info,
181
+            'tracking_signed': self.tracking_signed,
182
+            'tracking_signed_images': self.tracking_signed_images,
183
+            'back_express_name': self.back_express_name,
184
+            'back_express_com': self.back_express_com,
185
+            'back_tracking_number': self.back_tracking_number,
186
+            'back_tracking_info': self.back_tracking_info,
187
+            'back_tracking_signed': self.back_tracking_signed,
188
+            'audit_status': self.audit_status,
189
+            'request_status': self.request_status,
190
+            'request_status_at': {k: tc.local_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%d %H:%M:%S')) for k, v in self.request_status_at.items()},
156 191
             'created_at': tc.local_string(utc_dt=self.created_at),
157
-            'updated_at': tc.local_string(utc_dt=self.updated_at),
158 192
         }